package cn.always.xiajia.framework.common.exception.enums;

import cn.always.xiajia.framework.common.exception.ErrorCode;

/**
 * * 全局错误码枚举 0-999 系统异常编码保留
 *
 * 一般情况下，使用 HTTP 响应状态码 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
 * 虽然说，HTTP 响应状态码作为业务使用表达能力偏弱，但是使用在系统层面还是非常不错的 比较特殊的是，因为之前一直使用 0 作为成功，就不使用 200
 * 啦。
 * 
 * @author xgj
 *
 */
public interface GlobalErrorCodeConstants {

	ErrorCode SUCCESS = new ErrorCode(0, "成功");

	// ========== 客户端错误段 ==========
	ErrorCode BAD_REQUEST = new ErrorCode(400, "请求参数不正确");
	ErrorCode UNAUTHORIZED = new ErrorCode(401, "账号未登录");
	ErrorCode FORBIDDEN = new ErrorCode(403, "没有该操作权限");
	ErrorCode NOT_FOUND = new ErrorCode(404, "请求未找到");
	ErrorCode METHOD_NOT_ALLOWED = new ErrorCode(405, "请求方法不正确");
	ErrorCode LOCKED = new ErrorCode(423, "请求失败，请稍后重试"); // 并发请求，不允许
	ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "请求过于频繁，请稍后重试");

	// ========== 服务端错误段 ==========
	ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常");
	ErrorCode NOT_IMPLEMENTED = new ErrorCode(501, "功能未实现/未开启");

	// ========== 自定义错误段 ==========
	ErrorCode REPEATED_REQUESTS = new ErrorCode(900, "重复请求，请稍后重试"); // 重复请求
	ErrorCode DEMO_DENY = new ErrorCode(901, "演示模式，禁止写操作");
	ErrorCode CUSTOM = new ErrorCode(998, "自定义错误");
	ErrorCode UNKNOWN = new ErrorCode(999, "未知错误");

	// ========== admin 1 =========
	ErrorCode ADMIN_000001 = new ErrorCode(1_000001, "OAuth2 客户端不存在");
	ErrorCode ADMIN_000002 = new ErrorCode(1_000002, "OAuth2 客户端编号已存在");
	ErrorCode ADMIN_000003 = new ErrorCode(1_000003, "OAuth2 客户端已禁用");
	ErrorCode ADMIN_000004 = new ErrorCode(1_000004, "登录失败，账号密码不正确");
	ErrorCode ADMIN_000005 = new ErrorCode(1_000005, "登录失败，账号被禁用");
	ErrorCode ADMIN_000006 = new ErrorCode(1_000006, "验证码不正确，原因：{}");

}
